package com.itheima.d6_bigdecimal;

import java.math.BigDecimal;

/*
目标：掌握BigDecimal的四则运算
 */
public class Demo1 {
    public static void main(String[] args) {
        //问题：小数在进行运算时，由于底层存储原理，有精度损失问题.
        //System.out.println(0.09 + 0.01);

        //需求：使用BigDecimal对0.09和0.01进行四则运算
        //通过new构造器的方式获取BigDecimal对象
        //BigDecimal b1 = new BigDecimal(0.09);

        //如果非要用构造器获取对象，推荐使用传入字符串的
        //BigDecimal b1 = new BigDecimal("0.09");

        //更推荐的还是用静态的valueOf方法获取对象！
        BigDecimal b1 = BigDecimal.valueOf(0.09);

        //BigDecimal b2 = new BigDecimal(0.01);
        //BigDecimal b2 = new BigDecimal("0.01");
        BigDecimal b2 = BigDecimal.valueOf(0.01);

        //1.求和：add方法
        BigDecimal r1 = b1.add(b2);
        //发现结果不精确，原因：不推荐使用传入数字的构造器获取BigDecimal对象！
        System.out.println(r1);

        //2.求差：subtract
        BigDecimal r2 = b1.subtract(b2);
        System.out.println(r2);

        //3.乘法：multiply
        BigDecimal r3 = b1.multiply(b2);
        System.out.println(r3);

        //4.除法：divide
        BigDecimal r4 = b1.divide(b2);
        System.out.println(r4);

        //5.注意：divide一个形参的除法，结果必须是精确的，如果不是，代码运行会报错！
        BigDecimal b3 = BigDecimal.valueOf(10);
        BigDecimal b4 = BigDecimal.valueOf(3);
        BigDecimal r5 = b3.divide(b4); //报错：ArithmeticException
        //报错原因：b3 / b4 结果是不精确的，但是BigDecimal必须得到一个精确结果。怎么把不精确的变成精确的，没有跟计算机说明
        System.out.println(r5);
        //解决方案：告诉计算机一个舍入模式，比如四舍五入
    }
}
